

#ifndef _POINT_H_
#define _POINT_H_

#include "Color.h"

#include "Las_Export.h"

	namespace las
	{
		class Header;

		class LAS_API Point
		{
		public:
			Point();
			~Point();
		public:
			void SetHeader(Header* header);
			Header* GetHeader() const;
			void* GetData();
			void SetData(void* pData);
		public:
			double GetX() const;
			double GetY() const;
			double GetZ() const;
			std::int32_t GetRawX() const;
			std::int32_t GetRawY() const;
			std::int32_t GetRawZ() const;
			void SetCoordinates(double x, double y, double z);
			void SetX(double value);
			void SetY(double value);
			void SetZ(double value);
			void SetRawX(std::int32_t value);
			void SetRawY(std::int32_t value);
			void SetRawZ(std::int32_t value);
			std::uint16_t GetIntensity() const;
			void SetIntensity(std::uint16_t intensity);
// 			std::uint8_t GetScanFlags() const;
// 			void SetScanFlags(std::uint8_t flags);
			std::uint16_t GetReturnNumber() const;
			void SetReturnNumber(std::uint16_t num);
			std::uint16_t GetNumberOfReturns() const;
			void SetNumberOfReturns(std::uint16_t num);
// 			std::uint16_t GetScanDirection() const;
// 			void SetScanDirection(std::uint16_t dir);
// 			std::uint16_t GetFlightLineEdge() const;
// 			void SetFlightLineEdge(std::uint16_t edge);
			std::uint16_t GetClassification() const;
			void SetClassification(std::uint16_t num);
// 			std::int8_t GetScanAngleRank() const;
// 			void SetScanAngleRank(std::int8_t rank);
// 			std::uint8_t GetUserData() const;
// 			void SetUserData(std::uint8_t data);
// 			std::uint16_t GetPointSourceID() const;
// 			void SetPointSourceID(std::uint16_t id);
			Color GetColor() const;
			bool SetColor(Color const& value);
// 			double GetTime() const;
// 			void SetTime(double time);
		private:
			Header *m_pHeader;
			std::uint8_t* m_pData;
		};
	}

#endif